Infrastructure Proposal
A two-server architecture that fixes the resource contention measured on today's droplet, keeps the existing backup pipeline exactly as it is, and costs less than the current single-box setup.
PROD runs on a single 4-core DigitalOcean droplet today. We logged in and measured it directly rather than estimating — it's already at capacity, and the cause is specific enough to fix.
4.31
Load average (5 min), on 4 vCPUs — effectively full
31 GB
PostgreSQL data, growing
19 GB
MinIO object storage
74%
Disk used (113 of 154 GB)
Measured live, mid-morning — a routine moment, not a spike
All three share the same 4 cores. The backup job isn't idle overhead — it's a direct competitor.
The observability stack (Grafana, Prometheus, Tempo, Seq, and three exporters) — the part that looks like it should be the overhead — is actually the cheapest thing running, at roughly 13% CPU combined. The real story is PostgreSQL, the API, and the scheduled backup dump all fighting for the same four cores, and that backup dump repeats six times a day.
Split the database onto its own server. Nothing else needs separating — Mongo, MinIO, OSRM, and the full observability stack are all cheap enough to share the application server.
Solid lines are live request traffic. Dashed lines are backup and telemetry flows. Cloudflare is a drop-in addition in front of Traefik — see section 05.
Database tier
PostgreSQL + Redis
Application tier
API + Mongo + MinIO + OSRM + observability
No backup migration is required. The existing pipeline uploads to DigitalOcean Spaces over a plain HTTPS S3 API — it was never actually tied to the droplet being hosted at DigitalOcean, so the same bucket keeps working unchanged from Hostinger.
Hostinger's current KVM lineup, matched against what each tier actually needs to run.
| Role | Plan | vCPU | RAM | Disk | Intro / mo | Renews / mo |
|---|---|---|---|---|---|---|
| Database (PostgreSQL + Redis) | KVM 4 | 4 | 16 GB | 200 GB | ₹1,099 | ₹2,399 |
| Application (API + Mongo + MinIO + OSRM + observability) | KVM 4 | 4 | 16 GB | 200 GB | ₹1,099 | ₹2,399 |
| Application — with growth headroom | KVM 8 | 8 | 32 GB | 400 GB | ₹2,199 | ₹4,399 |
₹2,198
Minimum viable total — KVM 4 + KVM 4, intro price
₹3,298
With headroom — KVM 4 + KVM 8, intro price
Both options already beat today's single-droplet cost while roughly doubling total available compute (4 shared cores today → 8 dedicated cores split across two purpose-built servers). Prices shown are Hostinger's current promotional rate — budget against the renewal price for the ongoing run-rate.
Free tier is enough to start. It sits in front of Traefik, not in place of it.
| Included on Free | Notes |
|---|---|
| DNS + Universal SSL | Replaces nothing already in place, adds a layer in front |
| Basic DDoS mitigation | Always on, no configuration needed |
| CDN caching | Meaningful for the Portal's static assets; no benefit for API JSON traffic |
| WebSocket support | Works out of the box if live driver tracking needs it |
Three open calls before we start provisioning.
Application server: KVM 4 or KVM 8?
KVM 4 fixes today's measured problem. KVM 8 adds headroom for traffic growth and OSRM load spikes, for about ₹1,100/mo more.
Enable Cloudflare now, or after the server migration settles?
No dependency between the two — can be layered on at any point once DNS ownership is confirmed.
Timeline for the Postgres backup replica?
Not required for launch. Worth scheduling in the following sprint once the two-server split is stable.